package com.ehome.poct.core.service.rpc;

import com.ehome.poct.base.api.dto.device.*;
import com.ehome.poct.base.api.qry.device.DeviceOneQry;
import com.ehome.poct.base.api.qry.device.TestDeviceQry;
import com.ehome.poct.base.api.vo.device.TestDeviceClinicVO;
import com.ehome.poct.base.api.vo.device.TestDeviceParamVO;
import com.ehome.poct.base.api.vo.device.TestDevicePrinterVO;
import com.ehome.poct.base.api.vo.device.TestDeviceVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

/**
 * @author jiaming
 */
@FeignClient(value = "${service.poct-base:}${service.suffix.poct-base:}", path = "/device", contextId = "DeviceClient2")
public interface DeviceClient {
    
    /**
     * 通过sno拿devicedto
     *
     * @param Sno
     * @return
     */
    @GetMapping("/getBySno/{sno}")
    TestDeviceDTO getBySno(@PathVariable(value = "sno") String Sno);
    
    @GetMapping("/getDeviceBySno")
    List<TestDeviceClinicVO> getDeviceBySno(TestDeviceClinicDTO testDeviceClinicDTO);
    
    /**
     * 判断设备是否存在
     *
     * @param sno 设备号
     * @return
     */
    @GetMapping("/isExistence/{sno}")
    Boolean isExistence(@PathVariable String sno);
    
    /**
     * 新增设备
     *
     * @param addDeviceDTO
     * @return
     */
    @PostMapping("/addDevice")
    Boolean addDevice(@RequestBody AddDeviceDTO addDeviceDTO);
    
    /**
     * 修改设备状态
     *
     * @param dto
     */
    @PostMapping("/updateStatus")
    void updateStatus(@RequestBody DeviceStatusDTO dto);
    
    /**
     * 工厂模式
     *
     * @param addFactoryModeDTO
     * @return
     */
    @PostMapping("/addFactoryMode")
    boolean addFactoryModee(@RequestBody AddFactoryModeDTO addFactoryModeDTO);
    
    /**
     * 新增和修改设备配置文件
     *
     * @param testDeviceParamReqDto
     * @return
     */
    @PostMapping("/setDeviceParam")
    Boolean setDeviceParam(@RequestBody TestDeviceParamDTO testDeviceParamReqDto);
    
    /**
     * 获取设备的配置信息
     *
     * @param testDeviceParamDTO
     * @return
     */
    @GetMapping("/getDeviceParam")
    TestDeviceParamVO getDeviceParamNew(TestDeviceParamDTO testDeviceParamDTO);
    
    /**
     * 通过诊所id 和类型 拿devicedto
     *
     * @param paramDTO
     * @return
     */
    @PostMapping("/getBySnoAndType")
    TestDeviceVO getByClinicIdAndType(@RequestBody DeviceClinicDTO paramDTO);
    
    @GetMapping("/{id}")
    TestDeviceVO getById(@PathVariable Long id);
    
    @GetMapping
    List<TestDeviceVO> list(@SpringQueryMap TestDeviceQry qry);
    
    /**
     * 更新设备连接打印机信息
     *
     * @param testDevicePrinterDTO
     */
    @PostMapping("/devicePrinter")
    void devicePrinter(@RequestBody TestDevicePrinterDTO testDevicePrinterDTO);
    
    /**
     * 获取打印机连接打印机信息
     *
     * @param sno
     * @return
     */
    @GetMapping("/getDevicePrinter/{sno}")
    List<TestDevicePrinterVO> getDevicePrinter(@PathVariable(value = "sno") String sno);

    @GetMapping("/one")
    TestDeviceVO queryOne(@SpringQueryMap DeviceOneQry qry);
}
